/**
 * 合并if语句
 */

const babel = require('@babel/core');
const parser = require('@babel/parser');
const traverse = require('@babel/traverse').default;
const generate = require('@babel/generator').default;

// 要转换的代码
const code = `
if (a) {
    console.log('A');
}
if (b) {
    console.log('B');
}
`;

// 解析代码为 AST
const ast = parser.parse(code);

// 定义 visitor 对象
const visitor = {
    IfStatement(path) {
        const prevSibling = path.getPrevSibling();
        if (prevSibling && prevSibling.node.type === 'IfStatement') {
            const newTest = {
                type: 'LogicalExpression',
                operator: '||',
                left: prevSibling.node.test,
                right: path.node.test
            };
            prevSibling.node.test = newTest;
            prevSibling.node.consequent = {
                type: 'BlockStatement',
                body: [
                    ...prevSibling.node.consequent.body,
                    ...path.node.consequent.body
                ]
            };
            path.remove(); // 删除当前的 if 语句
        }
    }
};

// 遍历 AST
traverse(ast, visitor);

// 将修改后的 AST 转换回代码
const { code: transformedCode } = generate(ast);

// 输出转换后的代码
console.log(transformedCode);
// 输出
// if (a || b) {
//     console.log('A');
//     console.log('B');
// }